#ifndef INC_01_DOUBLELIST_H
#define INC_01_DOUBLELIST_H
typedef int Element_t;
typedef struct node{
    Element_t val;
    struct node *next;
    struct node *prev;
}Dnode_t,Dlist_t;
/*
为什么单链表需要多开一个结构体来当做头节点
而双链表直接用一个空节点来当做头节点？

因为单链表本身局限性，需要用一个结构体来当做头节点
记录链表的信息，比如链表的长度，链表的尾节点等。
而双链表因为自己的特性，用一个空节点来当做头节点，就可以记录链表的信息
*/

//本双链表实现是linux内核的实现方式，有前后两个指针来帮助实现一系列操作


//创建双向链表
Dlist_t *createDlist();
//释放双向链表
void releaseDlist(Dlist_t *header);
//头插
int insertDlistHead(Dlist_t *header, Element_t value);
//尾插
int insertDlistTail(Dlist_t *header, Element_t value);

//删除指定元素值
int deleteDlistValue(Dlist_t *header, Element_t value);

//打印双向链表
void showDlist(const Dlist_t *header);
#endif
